package com.itlong.cloud.propertyapp.dao;

import com.itlong.cloud.POJO.PO.PropertyAppDeviceGroupInfoPO;
import com.itlong.cloud.POJO.PO.PropertyProjectUserTypeInfoPO;
import com.itlong.cloud.POJO.PO.PropertyRolePO;
import com.itlong.cloud.POJO.PO.PropertyUserInfoPO;
import com.itlong.cloud.POJO.VO.app.property.AppGetHouseholdCheckVO;
import com.itlong.cloud.POJO.VO.app.property.app.PropertyAppFeedbackInfoVO;
import com.itlong.cloud.POJO.VO.app.property.app.PropertyAppUserProjectInfoVO;
import com.itlong.cloud.POJO.VO.common.QrcodeUserInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      物业APP用户信息数据访问接口
 * </desc>
 * @createDate 2019/12/30
 */
@Mapper
@Repository
public interface IPropertyAppUserDao {

    /**
     * <desc>
     *      获取住户审核列表
     * <desc/>
     *
     * @param projectId 项目编号
     * @return List<AppGetHouseholdCheckVO> 住户审核信息集
     * @Author Juguang.S
     * @createDate  2019/12/30
     */
    List<AppGetHouseholdCheckVO> getHoldAuditList(@Param("projectId") String projectId);

    /**
     * <desc>
     *      住户审核通过
     * </desc>
     *
     * @param projectId 项目编号
     * @param auditId   审核通过信息ID
     * @return
     * @Author Juguang.S
     * @createDate  2019/12/30
     */
    Integer agreeHoldAudit(@Param("projectId") String projectId,@Param("auditId") String auditId,@Param("modifyStatus") String modifyStatus);

    /**
     * <desc>
     *      用户登录验证
     * </desc>
     *
     * @param params
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/30
     */
    PropertyUserInfoPO getPropertyUserInfo(Map<String,Object> params);

    /**
     * <desc>
     *      获取登录用户的项目列表
     * </desc>
     *
     * @param userId
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/30
     */
    List<PropertyAppUserProjectInfoVO> getProjectListByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      获取所有项目列表
     * </desc>
     *
     * @Author Juguang.S
     * @createDate  2021/04/12
     */
    List<String> getAllProjectId();

    /**
     * <desc>
     *      批量保存物业用户类型 初始化数据
     * </desc>
     *
     * @Author Juguang.S
     * @createDate  2021/04/12
     */
    Integer batchSaveByPropertyUserType(List<PropertyProjectUserTypeInfoPO> list);

    /**
     * <desc>
     *      更改物业用户密码
     * </desc>
     *
     * @param params
     * @return
     * @Author Zhu.yj
     * @createDate  2019/12/31
     */
    Integer updatePropertyUserPassword(Map<String,Object> params);

    /**
     * <desc>
     *      获取物业app用户生成二维码所需的uid
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @Author Juguang.S
     * @createDate  2020/01/03
     */
    QrcodeUserInfoVO getPropertyUserUid(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新物业app用户生成二维码所需的uid
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @param uid
     * @return
     * @Author Juguang.S
     * @createDate  2020/01/03
     */
    Integer updateUid(@Param("userId") String userId,@Param("projectId") String projectId,@Param("uid") String uid);

    /**
     * <desc>
     *      通过项目id获取项目秘钥
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @Author Juguang.S
     * @createDate  2020/01/03
     */
    String getQrcodeProjectKey(@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新property_role_project
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @param qrCode 二维码
     * @param qrCodeEndTime 二维码生效过期时间
     * @param deviceUniques 设备排序
     * @return
     * @Author Juguang.S
     * @createDate  2020/01/03
     */
    Integer updatePropertyRoleProject(@Param("userId") String userId,
                                      @Param("projectId") String projectId,
                                      @Param("qrCode") String qrCode,
                                      @Param("qrCodeEndTime") String qrCodeEndTime,
                                      @Param("deviceUniques") String deviceUniques);

    /**
     * <desc>
     *      批量保存
     * </desc>
     *
     * @param params 待保存的信息列表
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2020/01/09
     */
    Integer batchSave(List<Map<String, Object>> params);

    /**
     * <desc>
     *      批量更新
     * </desc>
     *
     * @param params
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2020/01/09
     */
    Integer batchUpdate(List<Map<String, Object>> params);

    /**
     * <desc>
     *      查询groupid是否存在
     * </desc>
     *
     * @param groupId 分组ID
     * @return
     * @author Juguang.S
     * @createDate 2020/03/02
     */
    PropertyAppDeviceGroupInfoPO isExistByGroupId(@Param("groupId") String groupId);

    /**
     * <desc>
     *      更新
     * <desc/>
     *
     * @param  params   待保存的信息
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2020/01/09
     */
    Integer update(Map<String, Object> params);

    /**
     * <desc>
     *      获取物业APP用户设备排序信息
     * <desc/>
     *
     * @param  userId   用户编号
     * @param  projectId   项目编号
     * @return 设备排序信息
     * @author Juguang.S
     * @createDate 2020/01/09
     */
    String getPropertyAppUserDeviceOrder(@Param("userId") String userId,
                                         @Param("projectId") String projectId);

    /**
     * <desc>
     *      获取物业APP用户组设备排序信息
     * <desc/>
     *
     * @param  groupId   组编号
     * @return 组设备排序信息
     * @author Juguang.S
     * @createDate 2020/01/10
     */
    String getPropertyAppUserGroupDeviceOrder(@Param("groupId") String groupId);


    /**
     * <desc>
     *      获取第三方用户token
     * </desc>
     *
     * @param userId 用户编号
     * @return 第三方用户token
     * @Author Zhu.yj
     * @createDate  2020/1/8
     */
    String getUserClientToken(String userId);

    /**
     * <desc>
     *      查询角色详细信息
     * </desc>
     *
     * @param roleIds 角色id數組
     * @return
     * @Author Zhu.yj
     * @createDate  2020/1/2
     */
    List<PropertyRolePO> getPubTypeByRole(@Param("roleIds") String[] roleIds);

    /**
     * <desc>
     *      更新头像
     * </desc>
     *
     * @param params 更新参数
     * @return
     * @Author Zhu.yj
     * @createDate  2020/1/10
     */
    Integer updatePhotoOrName(Map<String,Object> params);

    /**
     * <desc>
     *      分页查询通行记录列表
     * </desc>
     *
     * @param params 查询参数
     * @return  通行记录分页列表
     * @Author Zhu.yj
     * @createDate  2020/1/14
     */
    List<Map<String, Object>> getPassRecordPage(Map<String, Object> params);

    /**
     * <desc>
     *      保存公共操作
     * </desc>
     *
     * @param params 保存参数
     * @return 受影响行数
     * @Author Zhu.yj
     * @createDate  2020/1/15
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      查询历史反馈信息
     * </desc>
     *
     * @param params 查询参数
     * @return 历史反馈信息列表
     * @Author Zhu.yj
     * @createDate  2020/1/15
     */
    List<PropertyAppFeedbackInfoVO> getHistoryFeedback(Map<String, Object> params);

    /**
     * <desc>
     *      查询权限标识
     * </desc>
     *
     * @return 权限标识
     * @author Juguang.S
     * @createDate 2020/01/15
     */
    String getNaturalFloor(@Param("deviceUnique") String deviceUnique, @Param("logicalFloor") String loadDeviceOrder);

    /**
     * <desc>
     *      查询用户常用楼层
     * </desc>
     *
     * @return 用户常用楼层
     * @author Juguang.S
     * @createDate 2020/01/15
     */
    String getCommonFloor(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      更新用户项目信息中常用楼层信息
     * </desc>
     *
     * @return 受影响行数
     * @author Juguang.S
     * @createDate 2020/01/15
     */
    Integer updateCommonFloor(@Param("userId") String userId, @Param("projectId") String projectId, @Param("commonFloor") String commonFloor);

    /**
     * <desc>
     *      获取用户状态
     * </desc>
     *
     * @param userId 用户id
     * @return
     * @Author Zhu.yj
     * @createDate  2020/1/16
     */
    Integer getUserStatus(@Param("userId") String userId);

    /**
     * <desc>
     *      查询该物业app用户该项目下的小区通知和系统消息条数
     * </desc>
     *
     * @param projectId 项目id
     * @param userId 用户id
     * @return 该物业app用户该项目下的小区通知和系统消息条数
     * @author wangzhi
     * @createDate 2020/02/17
     */
    Integer getAllUnreadPushInfoCount(@Param("projectId") String projectId, @Param("userId") String userId);

    /**
     * <desc>
     *      根据物业账号查询物业用户信息
     * </desc>
     *
     * @param accountNo 登录账号
     * @return
     * @Author Zhu.yj
     * @createDate  2020/2/27
     */
    PropertyUserInfoPO getByAccount(@Param("accountNo") String accountNo);

    /**
     * <desc>
     *      更新用户当前项目id
     * </desc>
     *
     * @param params 更新参数
     * @return
     * @Author Zhu.yj
     * @createDate  2020/3/16
     */
    Integer updateCurrentProjectId(Map<String, Object> params);

    /**
     * <desc>
     *      获取历史反馈总数
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @Author Zhu.yj
     * @createDate  2020/3/16
     */
    Integer getHistoryFeedbackCount(Map<String,Object> params);

    /**
     * <desc>
     *      根据deviceUnique查询居住楼层集合使用于物业APP
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @Author Juguang.S
     * @createDate  2020/04/16
     */
    List<String> getLiveFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);
}
